package com.it.machine.service;
import java.util.List;
import com.it.machine.domain.ActivationCode;

/**
 * 激活码Service接口
 * 
 * @author 云淡风轻
 * @date 2025-05-08
 */
public interface IActivationCodeService 
{
    /**
     * 查询激活码
     * 
     * @param id 激活码主键
     * @return 激活码
     */
    public ActivationCode selectActivationCodeById(Long id);

    /**
     * 根据激活码查询
     * 
     * @param activeCode 激活码
     * @return 激活码
     */
    public ActivationCode selectActivationCodeByCode(String activeCode);

    /**
     * 查询激活码列表
     * 
     * @param activationCode 激活码
     * @return 激活码集合
     */
    public List<ActivationCode> selectActivationCodeList(ActivationCode activationCode);

    /**
     * 新增激活码
     * 
     * @param activationCode 激活码
     * @return 结果
     */
    public int insertActivationCode(ActivationCode activationCode);

    /**
     * 修改激活码
     * 
     * @param activationCode 激活码
     * @return 结果
     */
    public int updateActivationCode(ActivationCode activationCode);

    /**
     * 批量删除激活码
     * 
     * @param ids 需要删除的激活码主键集合
     * @return 结果
     */
    public int deleteActivationCodeByIds(Long[] ids);

    /**
     * 删除激活码信息
     * 
     * @param id 激活码主键
     * @return 结果
     */
    public int deleteActivationCodeById(Long id);

    /**
     * 生成激活码
     * 
     * @param count 需要生成的激活码数量
     * @param proId 项目ID
     * @param proName 项目名称
     * @param mark 积分
     * @param validityType 有效期类型
     * @param validityValue 有效期值
     * @return 生成的激活码列表
     */
    public List<ActivationCode> generateActivationCodes(int count, String proId, String proName, Long mark, String validityType, Long validityValue);

    /**
     * 验证激活码是否有效
     * 
     * @param proId 项目ID
     * @param activeCode 激活码
     * @return 验证结果：0-有效，1-无效，2-已使用，4-已过期
     */
    public int validateActivationCode(String proId, String activeCode);
    
    /**
     * 根据用户ID查询激活码列表
     * 
     * @param allocateUserId 分配用户ID
     * @return 激活码集合
     */
    public List<ActivationCode> selectActivationCodesByAllocateUserId(Long allocateUserId);
    
    /**
     * 根据项目ID查询未分配的激活码
     * 
     * @param proId 项目ID
     * @return 激活码集合
     */
    public List<ActivationCode> selectUnallocatedActivationCodesByProId(String proId);
    
    /**
     * 分配激活码给用户
     * 
     * @param ids 激活码ID集合
     * @param allocateUserId 分配用户ID
     * @param allocateUserName 分配用户名
     * @return 结果
     */
    public int allocateActivationCodesToUser(Long[] ids, Long allocateUserId, String allocateUserName);
    
    /**
     * 批量分配激活码给用户
     * 
     * @param proId 项目ID
     * @param count 分配数量
     * @param allocateUserId 分配用户ID
     * @param allocateUserName 分配用户名
     * @return 分配的激活码列表
     */
    public List<ActivationCode> batchAllocateActivationCodes(String proId, int count, Long allocateUserId, String allocateUserName);
}